<?php
namespace Lib;
class Controller{
	/**
	 * user model
	 * @var object
	 */
	protected $u;
	/**
	 * 用户信息
	 * @var array
	 */
	public $userInfo = array();
	/**
	 * 存储错误信息
	 * @var string
	 */
	public $error = '';
	/**
	 * 需要返回的消息内容
	 * @var array
	 */
	protected $data = array(
			'type'		=> 1,//消息类型 1：正确 2：错误
			'run_time'	=> 0,//php脚本的执行时间
			//'errcode'	=> 40000,//错误代码 40000:没有错误
			//'errmsg'	=> '',//错误信息
	);
	/**
	 * 用户POST提交的原始数据
	 * @var string
	 */
	protected $_input = '';
	/**
	 * 提交的json转换为数组对象
	 * @var array
	 */
	protected  $param = array();
	/**
	 * 所有需要登录后才能访问的接口都需要调用此构造函数
	 */
	function __construct(){
		//获取到post提交的原始数据
		$this->_input = file_get_contents('php://input', 'r');
		if(!empty($this->_input)){
			//把json数据转换为数组对象
			$jparam = json_decode($this->_input,true);
			foreach ($jparam as $key => $val){
				$this->param[$key] = $val;
			}
			
		}
		//把GET POST数据装到 param 中
		foreach ($_GET as $key => $val){
			$this->param[$key] = $val;
		}
		foreach ($_POST as $key => $val){
			$this->param[$key] = $val;
		}
		
		// 初始化模型
		$this->u = D ( 'User' );
		// 验证用户操作权限
		//权限验证
		// 验证失败，只可以执行登陆和注册操作
		if ((ACTION_NAME != 'register') && (ACTION_NAME != 'login')) {
			//如果不是登陆或注册，需要验证用户是否登陆
			$this->userInfo = $this->u->loginCheck ( $this->param['user_id'], $this->param['key'] );
			if ($this->userInfo) {
				// 验证成功，可以执行所有操作
				//echo ACTION_NAME;
			} else {
				//print_r($this->param);
				$this->error ( ERROR_NO_PERMISSIONS, '没有登陆，没有相应的权限' . ACTION_NAME);
			}
		}
	}
	/**
	 * 输出错误信息，会终止脚本继续运行
	 * @param number $code 错误代码
	 * @param string $msg  错误信息
	 */
	protected function error($code=40001,$msg=''){
		$this->data['errcode']	= $code;
		$this->data['errmsg']	= $msg;
		$this->data['type']		= 2;
		$this->_show();
		die();//错误输出，终止脚本运行
	}
	/**
	 * 输出数据
	 * @param array $data
	 */
	protected function show($data=''){
		$this->data['type']		= 1;
		if(is_array($data)){
			foreach ($data as $key => $val){
				$this->data[$key] = $val;
			}
		}else{
			$this->data['msg'] = $data;
		}
		//print_r($data);
		$this->_show();
	}
	protected function _show(){		
		if(defined('START_RUN_TIME')){//定义了开始时间，计算脚本执行时间
			$t2 = microtime(true);
			$this->data['run_time'] = round($t2-START_RUN_TIME,3);//计算到当前的执行时间
		}
		header('Content-type: application/json');
		echo json_encode($this->data);
	}
	
}
?>